package file.test2;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class FileTypeCount {
    public static void main(String[] args) {
        //获取文件夹下各种文件的个数
        File file = new File("D:\\software\\Jack");
        HashMap<String, Integer> map = getTypeCount(file);
        System.out.println(map);
    }

    public static HashMap<String, Integer> getTypeCount(File file) {
        //1.获取文件数据
        File[] files = file.listFiles();
        //创建map集合
        HashMap<String, Integer> hm = new HashMap<>();
        //2.对文件数组进行遍历
        for (File f : files) {
            //3.判读是否为文件
            if (f.isFile()) {
                //3.1对文件名进行分割
                String[] list = f.getName().split("\\.");
                //3.2 获取到文件后缀名
                String fileName = list[list.length - 1];
                //3.3 将值存入map集合中
                //4.判断在map中是否存在
                //4.1 存在
                if (hm.containsKey(fileName)) {
                    int count = hm.get(fileName);
                    hm.put(fileName, ++count);
                } else {
                    //4.2不存在
                    hm.put(fileName, 1);

                }

            } else {
                //是文件夹,进行递归
                //这里返回的是子集的map集合
                HashMap<String, Integer> somMap = getTypeCount(f);
                //先获取文件的键值对项,对集合进行遍历
                Set<Map.Entry<String, Integer>> entries = somMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    Integer value = entry.getValue();
                    //进行判断是否在父集合中存在
                    if (hm.containsKey(key)) {
                        //存在
                        Integer count = hm.get(key);
                        hm.put(key, value + count);
                    } else {
                        //不存在
                        hm.put(key, value);
                    }
                }

            }
        }
        return hm;
    }
}
